package test.qartz;

import java.util.List;
import java.util.Set;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerKey;
import org.springframework.expression.ParseException;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;

public class ScheduleInfoManager {

	private Scheduler scheduler;
	
	public void setScheduler(Scheduler scheduler) {     
	     this.scheduler = scheduler;     
	}
	
	public String getCronExpressionFromDB(){     
//        String sql="from ScheduleInfo scheduleInfo where 1=1 ";     
//        sql=sql+" and scheduleInfo.infoId = '"+"1" + "'";     
//        List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql);
//        ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0);
        String dbCronExpression = "";//scheduleInfo.getCronExpression();     
       return dbCronExpression;     
	}
	
	private void reScheduleJob() throws SchedulerException,ParseException {
//		Set<TriggerKey> set = new Set();
	// 运行时可通过动态注入的scheduler得到trigger，注意采用这种注入方式在有的项目中会有问题，如果遇到注入问题，可以采取在运行方法时候，获得bean来避免错误发生。
        CronTriggerFactoryBean trigger = (CronTriggerFactoryBean) scheduler.getTrigger("cronTrigger", Scheduler.DEFAULT_GROUP);  
        String dbCronExpression = getCronExpressionFromDB();  
        String originConExpression = trigger.getCronExpression();  
    // 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等  
    // 如果相等，则表示用户并没有重新设定数据库中的任务时间，这种情况不需要重新rescheduleJob  
        if(!originConExpression.equalsIgnoreCase(dbCronExpression)){  
            trigger.setCronExpression(dbCronExpression);  
            scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger);  
        }  
    // 下面是具体的job内容，可自行设置  
    // executeJobDetail();
	}
     
}